Imports System.Data.SqlClient

Imports Common
Imports Common.Env
Imports Lincker.DA.Sql
Imports Lincker.SPMCgestion.BR.Interfaces
Imports Common.spmc


Public Class TiposTransacciones
    Inherits Abm
    Implements ITipoTransaccion

    Dim _seguridadTransacciones As New SeguridadTransacciones()

    Sub New()
        MyBase.New(Operador, Password, "tatransacciones", "wad_transacciones")

        Dim arrayTablasDetalle As New ArrayList()
        arrayTablasDetalle.Add("wld_seguridad_transac")
        MyBase.setTablasDetalle(arrayTablasDetalle)

    End Sub

    Public Function getAutorizaciones(ByVal tipoTransaccion As String) As DataSet Implements ITipoTransaccion.getAutorizaciones

        Return _seguridadTransacciones.Buscar("cd_transaccion = '" & tipoTransaccion & "'")

    End Function

    Public Function getTransaccionesPorGrupo(ByVal grupoID As String) As DataSet Implements ITipoTransaccion.getTransaccionesPorGrupo

        Dim paramArrayList As New ArrayList()
        paramArrayList.Add(grupoID)
        Return ExecSPDS(ConnectionString, "tld_transac_grupo", paramArrayList)

    End Function

    Public Function getTiposMovimiento() As tipo_mov_stock Implements ITipoTransaccion.getTiposMovimiento

        Dim ds As New tipo_mov_stock()
        Dim row(1) As String
        row(0) = "I"
        row(1) = "Ingreso al stock"
        ds.tipo_mov_stock.Rows.Add(row)
        row(0) = "E"
        row(1) = "Egreso del stock"
        ds.tipo_mov_stock.Rows.Add(row)
        row(0) = "M"
        row(1) = "Movimiento"
        ds.tipo_mov_stock.Rows.Add(row)
        row(0) = "G"
        row(1) = "Consumo interno"
        ds.tipo_mov_stock.Rows.Add(row)
        row(0) = "C"
        row(1) = "Clasificacion"
        ds.tipo_mov_stock.Rows.Add(row)
        row(0) = "J"
        row(1) = "Canje, cambio de embalaje"
        ds.tipo_mov_stock.Rows.Add(row)
        Return ds

    End Function

    Private Sub TiposTransacciones_Validando(ByRef cancela As Boolean, ByRef paramDataTable As System.Data.DataTable) Handles MyBase.Validando

        Dim row As DataRow

        For Each row In paramDataTable.Rows
            With row
                If .RowState <> DataRowState.Deleted Then
                    row("st_interno_sistema") = False
                End If
            End With
        Next

    End Sub

    Public Overloads Overrides Function ActualizarDatos(ByRef paramDataSet As System.Data.DataSet) As Boolean

        Dim tran As SqlTransaction = Nothing

        Try
            InicializarConeccion()

            _cn.Open()
            tran = _cn.BeginTransaction

            'Si se esta eliminando la cabecera primero se borran los detalles
            If Not paramDataSet.Tables(_tablaPrincipal).GetChanges(DataRowState.Deleted) Is Nothing Then
                _seguridadTransacciones.ActualizarDatos(paramDataSet, _cn, tran)
                MyBase.ActualizarDatos(paramDataSet, _cn, tran)
            Else
                MyBase.ActualizarDatos(paramDataSet, _cn, tran)
                If Not paramDataSet.HasErrors Then
                    _seguridadTransacciones.ActualizarDatos(paramDataSet, _cn, tran)
                End If
            End If

            If paramDataSet.HasErrors Then
                tran.Rollback()
            Else
                tran.Commit()
            End If

        Catch ex As Exception
            tran.Rollback()
            Throw ex

        Finally
            tran = Nothing
            _cn.Close()
            _cn = Nothing

        End Try

    End Function

    Private Sub TiposTransacciones_Eliminando(ByRef cancela As Boolean, ByRef row As System.Data.DataRow) Handles MyBase.Eliminando

        'Dim trans As New Lincker.SPMC.BR.Stock.Transacciones()

        If CType(row("st_interno_sistema", DataRowVersion.Original), Integer) = 1 Then
            row.SetColumnError("cd_transaccion", "No se puede eliminar este registro.")
        End If

        'TODO: Cambiar por search
        'If trans.Buscar("cd_transaccion = '" & CType(row("cd_transaccion", DataRowVersion.Original), String) & "'").Tables(0).Rows.Count > 0 Then
        '    row.SetColumnError("cd_transaccion", "No se puede eliminar este registro por haberse encontrado transacciones.")
        'End If
        If Search(ConnectionString, "cd_transaccion", "tad_transacciones", "cd_transaccion = '" & CType(row("cd_transaccion", DataRowVersion.Original), String) & "'").Tables(0).Rows.Count > 0 Then
            row.SetColumnError("cd_transaccion", "No se puede eliminar este registro por haberse encontrado transacciones.")
        End If


    End Sub

End Class

Public Class SeguridadTransacciones
    Inherits Lincker.SPMC.BR.Abm

    Sub New()
        MyBase.New(Operador, Password, "tatransacciones", "wld_seguridad_transac")

    End Sub

End Class
